perm filename SEGDPY.SAI[SYS,HE]2 blob
sn#021182 filedate 1973-01-23 generic text, type T, neo UTF8
COMMENT ⊗ VALID 00013 PAGES
RECORD PAGE DESCRIPTION
00001 00001
00005 00002 ENTRY DUMMY
00006 00003 α LOCALS, INTERNALS, AND EXTERNALS
00008 00004 α SYSTEM
00009 00005 α STATUS - PAGE 1
00011 00006 α STATUS - PAGE 2
00012 00007 α STATUS + PAGE 3
00013 00008 α PRIMITIVES - PAGE 1
00015 00009 α PRIMITIVES - PAGE 2
00017 00010 α PRIMITIVES - PAGE 3
00020 00011 α PRIMITIVES + PAGE 4
00023 00012 α INITIALIZATION SUBRS
00025 00013 α FLIT
00031 ENDMK
⊗;
ENTRY DUMMY;
BEGIN "SEGDPY - SEGMENTER'S DISPLAY ROUTINES"
REQUIRE 100 PNAMES;
REQUIRE "PREAMB.SAI[SYS,HE]" SOURCE_FILE;
REQUIRE "CPXSYM.AUX[SYS,HE]" SOURCE_FILE;
REQUIRE "DPYIII.AUX[H,RPO]" SOURCE_FILE;
DEFINE
APOG=<1>,
BPOG=<2>,
SPOG=<3>,
T1POG=<4>,
T2POG=<5>,
TEXT=<1>, MEDIUM=<2>, BIG=<5>,
DIM=<3>, BRIGHT=<6>;
α LOCALS, INTERNALS, AND EXTERNALS;
α INTERNALS;
INTERNAL SAFE INTEGER ARRAY
DPYAA[1:200],
DPYBB[1:100],
DPYCC[1:10];
INTERNAL BOOLEAN
DPYBOOL;
INTERNAL STRING
DPYRTS;
α LOCALS;
BOOLEAN
DB_BRK, DB_JOB, DB_LAB, DB_TELL, DB_INFO,
DB_CMD, DB_LOC, DB_INIT;
STRING
NAME, DS_JOB, DS_LAB, DS_TELL, DS_INFO, DS_CMD;
SET
ESET;
INTEGER
α DISPLAY WINDOW;
DXL,DXH,DXCTR,DXO,DDX,
DYL,DYH,DYCTR,DYO,DDY, DA;
REAL
α LOGICAL PARAMETERS;
LDX,LDY,
α SOURCE WINDOW;
SXL,SXH,SXO,SDX,
SYL,SYH,SYO,SDY, SA,
α OBJECT WINDOW;
OXL,OXH,
OYL,OYH,
MAGX,MAGY,DISX,DISY;
α EXTERNALS;
EXTERNAL INTEGER
DEBUG2;
EXTERNAL ITEMVAR
NODE,GRAPH,NMATCH,BSCENE;
α SYSTEM ;
INTERNAL STRING SUBR PRINTNAME(ITEMVAR X);
BEGIN "PRINTNAME"
STRING NAME; INTEGER FLAG;
NAME←CVIS(X,FLAG);
IF FLAG
THEN ⊂ IF CVN(X)>1024
THEN NAME←"G"&CVOS(CVN(X))
ELSE NAME←"L"&CVOS(CVN(X));
NEW_PNAME(X,NAME) ⊃;
RETURN(NAME);
END "PRINTNAME";
α STATUS - PAGE 1;
FORWARD ISUBR DPYS;
FORWARD ISUBR DPYBS;
FORWARD ISUBR DPYLS;
FORWARD ISUBR DPYL(ITEMVAR L);
FORWARD ISUBR DPYPTS;
FORWARD ISUBR DPYFLVS;
FORWARD ISUBR DPYNS;
FORWARD ISUBR DPYSCENE;
FORWARD ISUBR FLIT;
DEFINE
JOBLINE= <DXL+5,DYH-30>,
TELLINE= <DXCTR,DYH-25>,
LABLINE= <DXCTR,DYH-40>,
INFOLINE= <DXCTR,DYH-55>,
CMDLINE= <DXCTR,DYH-70>;
SUBR DPYFRAME;
IF DEBUG2
THEN
⊂ "DPYFRAME" AIVECT(DXL,DYL);AVECT(DXH,DYL);AVECT(DXH,DYH);
AVECT(DXL,DYH);AVECT(DXL,DYL);
AIVECT(OXL,OYL);AVECT(OXH,OYL);AVECT(OXH,OYH);
AVECT(OXL,OYH);AVECT(OXL,OYL) ⊃ "DPYFRAME";
ISUBR DPYSTAT;
IF DEBUG2
THEN
BEGIN "DPYSTAT"
DPYSET(DPYAA);
DPYBIG(MEDIUM);
DPYBRT(DIM);
DPYFRAME;
AIVECT(JOBLINE);
IF DB_BRK
THEN DPYSST("* "&DS_JOB)
ELSE DPYSST("- "&DS_JOB);
IF DB_LAB
THEN ⊂ AIVECT(LABLINE); DPYSST(DS_LAB) ⊃;
IF DB_TELL
THEN ⊂ AIVECT(TELLINE); DPYSST(DS_TELL) ⊃;
IF DB_INFO
THEN ⊂ AIVECT(INFOLINE); DPYSST(DS_INFO) ⊃;
IF DB_CMD
THEN ⊂ AIVECT(CMDLINE); DPYSST(DS_CMD) ⊃;
DPYOUT(SPOG);
END "DPYSTAT";
α STATUS - PAGE 2;
ISUBR DPYBRK;
IF DEBUG2
THEN ⊂ "DPYBRK" DB_BRK←TRUE; DPYSTAT; DPYRTS←INCHWL;
IF EQU(DPYRTS,"RUN")
THEN DEBUG2←FALSE
ELSE
IF EQU(DPYRTS,"BODIES")
THEN DPYBS
ELSE
IF EQU(DPYRTS,"LINES")
THEN DPYLS
ELSE
IF EQU(DPYRTS,"POINTS")
THEN DPYPTS
ELSE
IF EQU(DPYRTS,"FLAVORS")
THEN DPYFLVS
ELSE
IF EQU(DPYRTS,"NODES")
THEN DPYNS
ELSE
IF EQU(DPYRTS,"DEBUG")
THEN DEBUG2←TRUE
ELSE
IF EQU(DPYRTS,"LOCAL")
THEN DPYS
ELSE
IF EQU(DPYRTS,"GLOBAL")
THEN DPYSCENE
ELSE
IF EQU(DPYRTS,"FLIT")
THEN FLIT;
DB_BRK←FALSE; DPYSTAT; ⊃ "DPYBRK";
α STATUS + PAGE 3;
ISUBR DPYJOB(STRING JOBNAM);
IF DEBUG2
THEN
⊂ "DPYJOB" DB_JOB←TRUE; DS_JOB←JOBNAM; DPYSTAT; ⊃ "DPYJOB";
ISUBR DPYLAB(STRING STR);
IF DEBUG2
THEN
⊂ "DPYLAB" DB_LAB←TRUE; DS_LAB←STR; DPYBRK; ⊃ "DPYLAB";
ISUBR DPYTELL(STRING STR);
IF DEBUG2
THEN
⊂ "DPYTELL" DB_TELL←TRUE; DS_TELL←STR; DPYSTAT; ⊃ "DPYTELL";
ISUBR DPYINFO(STRING STR);
IF DEBUG2
THEN
⊂ "DPYINFO" DB_INFO←TRUE; DS_INFO←STR; DPYSTAT; ⊃ "DPYINFO";
ISUBR DPYCMD(STRING STR);
IF DEBUG2
THEN
⊂ "DPYCMD" DB_CMD←TRUE; DS_CMD←STR; DPYSTAT; ⊃ "DPYCMD";
α PRIMITIVES - PAGE 1;
ISUBR DPYPT(SAFE REAL ARRAY ITEMVAR PT);
IF DEBUG2
THEN
⊂ "DPYPT"
NAME←PRINTNAME(PT);
DPYSET(DPYCC);
DPYBIG(TEXT);
DPYBRT(BRIGHT);
IF NAME="G"
THEN AIVECT($ #X(PT)-10,$ #Y(PT)-10)
ELSE AIVECT(#X(PT)-10,#Y(PT)-10);
DPYSST("o"&NAME);
DPYOUT(T1POG);
DPYBRK;
HYDPOG(T1POG) ⊃ "DPYPT";
ISUBR DPYPTS;
IF DEBUG2
THEN
⊂ "DPYPTS"
SAFE REAL ARRAY ITEMVAR P;ITEMVAR L;
DPYSET(DPYAA);
DPYBIG(TEXT);
DPYBRT(DIM);
IF ¬DB_LOC
THEN ∀ L|LINE⊗BSCENE≡L DO DPYL(L);
∀ P|POINT⊗SCENE≡P DO
⊂ AIVECT(#X(P)-10,#Y(P)-10);
DPYSST(PRINTNAME(P)) ⊃;
DPYOUT(T1POG);
DPYINFO("POINTS");
DPYBRK;
HYDPOG(T1POG) ⊃ "DPYPTS";
α PRIMITIVES - PAGE 2;
ISUBR DPYFLVS;
IF DEBUG2
THEN
⊂ "DPYFLVS"
SAFE REAL ARRAY ITEMVAR P;ITEMVAR L,F;
DPYSET(DPYAA);
DPYBIG(TEXT);
DPYBRT(DIM);
IF ¬DB_LOC
THEN ∀ L|LINE⊗BSCENE≡L DO DPYL(L);
∀ P,F|POINT⊗BSCENE≡P ∧ FLAVOR⊗P≡F DO
⊂ AIVECT(#X(P)-10,#Y(P)-10);
DPYSST(PRINTNAME(F)) ⊃;
DPYOUT(T1POG);
DPYINFO("FLAVORS");
DPYBRK;
HYDPOG(T1POG) ⊃ "DPYFLVS";
ISUBR DPYNS;
IF DEBUG2
THEN
⊂ "DPYNS"
SAFE REAL ARRAY ITEMVAR P;ITEMVAR L,N;
DPYSET(DPYAA);
DPYBIG(TEXT);
DPYBRT(DIM);
IF ¬DB_LOC
THEN ∀ L|LINE⊗BSCENE≡L DO DPYL(L);
∀ N,P|NODE⊗GRAPH≡N ∧ NMATCH⊗N≡P DO
⊂ AIVECT(#X(P)-10,#Y(P)-10);
DPYSST("*") ⊃;
DPYOUT(T1POG);
DPYINFO("NODES");
DPYBRK;
HYDPOG(T1POG) ⊃ "DPYNS";
α PRIMITIVES - PAGE 3;
ISUBR DPYL(ITEMVAR L);
IF DEBUG2
THEN
⊂ "DPYL"
SAFE REAL ARRAY ITEMVAR V1,V2;
NAME←PRINTNAME(L);
IF NAME="G"
THEN ⊂ ESET← $ ENDPT⊗L;
IF LENGTH(ESET)≠2
THEN ⊂ TYPE "BAD LINE:"&NAME EOM;
RETURN ⊃;
V1←LOP(ESET);
V2←COP(ESET);
AIVECT($ #X(V1), $ #Y(V1));
AVECT($ #X(V2), $ #Y(V2)) ⊃
ELSE ⊂ ESET← ENDPT⊗L;
IF LENGTH(ESET)≠2
THEN ⊂ TYPE "BAD LINE:"&NAME EOM;
RETURN ⊃;
V1←LOP(ESET);
V2←COP(ESET);
AIVECT(#X(V1), #Y(V1));
AVECT(#X(V2), #Y(V2)) ⊃ ⊃ "DPYL";
ISUBR DPYLN(ITEMVAR L);
IF DEBUG2
THEN
⊂ "DPYLN"
REAL X,Y;
SAFE REAL ARRAY ITEMVAR V1,V2;
NAME←PRINTNAME(L);
IF NAME="G"
THEN ⊂ ESET← $ ENDPT⊗L;
IF LENGTH(ESET)≠2
THEN ⊂ TYPE "BAD LINE:"&NAME EOM;
RETURN ⊃;
V1←LOP(ESET);
V2←COP(ESET);
X← ( $ #X(V1) + $ #X(V2) )/2;
Y← ( $ #Y(V1) + $ #Y(V2) )/2 ⊃
ELSE ⊂ ESET← ENDPT⊗L;
IF LENGTH(ESET)≠2
THEN ⊂ TYPE "BAD LINE:"&NAME EOM;
RETURN ⊃;
V1←LOP(ESET);
V2←COP(ESET);
X← ( #X(V1)+#X(V2))/2;
Y← ( #Y(V1)+#Y(V2))/2 ⊃;
AIVECT(X-10,Y-10);
DPYSST(NAME) ⊃ "DPYLN";
ISUBR DPYLS;
IF DEBUG2
THEN
⊂ "DPYLS"
ITEMVAR L;
DPYSET(DPYAA);
DPYBIG(TEXT);
DPYBRT(DIM);
∀ L|LINE⊗BSCENE≡L DO
⊂ DPYL(L); DPYLN(L) ⊃;
DPYOUT(T1POG);
DPYINFO("LINES");
DPYBRK;
HYDPOG(T1POG) ⊃ "DPYLS";
α PRIMITIVES + PAGE 4;
ISUBR DPYB(ITEMVAR B);
IF DEBUG2
THEN
⊂ "DPYB" ITEMVAR L;
DPYSET(DPYAA); DPYBRT(BRIGHT);DPYBIG(TEXT);
NAME←PRINTNAME(B);
IF NAME="G"
THEN ∀ L| $ LINE⊗B≡L DO DPYL(L)
ELSE ∀ L| LINE⊗B≡L DO DPYL(L);
DPYOUT(APOG); DPYINFO("BODY "&NAME) ⊃ "DPYB";
ISUBR DPYBS;
IF DEBUG2
THEN
⊂ "DPYBS" ITEMVAR L,B;
SAFE REAL ARRAY ITEMVAR P;
∀ B|BODY⊗BSCENE≡B DO
⊂ DPYTELL("BODY "&PRINTNAME(B));
DPYSET(DPYAA);
DPYBRT(BRIGHT);
DPYBIG(TEXT);
∀ L| LINE⊗B≡L DO DPYL(L);
DPYOUT(T1POG);
DPYLAB("LINES");
HYDPOG(T1POG);
DPYSET(DPYAA);
DPYBRT(BRIGHT);
DPYBIG(TEXT);
∀ P| POINT⊗B≡P DO
⊂ AIVECT(#X(P)-10,#Y(P)-10);
DPYSST(PRINTNAME(P)) ⊃;
DPYOUT(T1POG);
DPYLAB("POINTS") ⊃ ⊃ "DPYBS";
ISUBR DPYS;
IF DEBUG2
THEN
⊂ "DPYS" ITEMVAR L;
DB_LOC←TRUE;
DPYSET(DPYAA); DPYBRT(DIM); DPYBIG(TEXT);
∀ L|LINE⊗BSCENE≡L DO DPYL(L);
DPYOUT(BPOG); DPYLAB("THE LOCAL SCENE") ⊃ "DPYS";
ISUBR DPYSCENE;
IF DEBUG2
THEN
⊂ "DPYSCENE" ITEMVAR L;
DPYSET(DPYAA); DPYBRT(DIM); DPYBIG(TEXT);
∀ L|$ LINE⊗BSCENE≡L DO DPYL(L);
DPYOUT(BPOG); DPYLAB("THE GLOBAL SCENE") ⊃ "DPYSCENE";
ISUBR DPYDONE;
IF DEBUG2
THEN
⊂ "DPYDONE" ITEMVAR B,L;
DPYS;
DPYSET(DPYAA); DPYBRT(BRIGHT);DPYBIG(TEXT);
∀ B|BODY⊗BSCENE≡B DO
∀ L|LINE⊗B≡L DO DPYL(L);
DPYTELL("RESULTS");
DPYOUT(APOG);
DPYLAB(CVS(LENGTH(BODY⊗BSCENE))&" BODIES");
DB_INIT←FALSE ⊃ "DPYDONE";
α INITIALIZATION SUBRS;
ISUBR DPYINIT;
IF DEBUG2 ∧ ¬DB_INIT
THEN
⊂ "DPYINIT"
α PHYSICAL, LOGICAL CAMERA SIZE;
LDX ← 316; LDY ← 240;
α SOURCE WINDOW;
SXL←0; SXH←LDX; SDX←LDX;
SYL←0; SYH←LDY; SDY←LDY;
SXO←0; SYO←0; SA←SDX/SDY;
α DISPLAY WINDOW;
DDX←DDY←500; DA←1;
DXO←-500; DYO←0;
DXL←DXO; DXH←DXO+DDX; DYL←DYO; DYH←DYO+DDY;
α OBJECT WINDOW;
MAGX←MAGY←(IF SA>DA THEN DDX/SDX ELSE DDY/SDY);
OXL←DXO; OXH←DXO+MAGX*SDX;
OYL←DYO; OYH←DYO+MAGY*SDY;
DISX←DXO; DISY←DYO;
DXCTR←(DXL+DXH)/2; DYCTR←(DYL+DYH)/2;
DB_LOC←FALSE;
DPYTYP(-20,20,1);
DPYJOB("SEGMENTER");DPYLAB("DISPLAY INITIALIZED");
DB_INIT←TRUE;
⊃ "DPYINIT";
ISUBR DPYVINIT;
⊂ "DPYVINIT"
SAFE REAL ARRAY ITEMVAR P;
∀ P|POINT⊗BSCENE≡P DO
⊂ ∂(P)[2]← SDY - ∂(P)[2];
∂(P)[6] ← MAGX * ∂(P)[1] + DISX;
∂(P)[7] ← MAGY * ∂(P)[2] + DISY; ⊃ ⊃ "DPYVINIT";
ISUBR DPYVI(SAFE REAL ARRAY ITEMVAR V);
IF DEBUG2
THEN
⊂ "DPYVI"
∂(V)[6] ← MAGX * ∂(V)[1] + DISX;
∂(V)[7] ← MAGY * ∂(V)[2] + DISY; ⊃ "DPYVI";
α FLIT
called from DPYBRK.
allows you to look at selected parts of
the associative store for debugging purposes.
TYPEIT="0" MEANS NO ITEMVAR !
TYPEIT="1" MEANS NO TYPE !
TYPEIT="4" MEANS REAL ITEMVAR
TYPEIT="6" MEANS SET ITEMVAR
TYPEIT="17" MEANS REAL ARRAY
;
ISUBR FLIT;
BEGIN "FLIT"
LABEL TRIPLE;
BOOLEAN GLBSW,DTMSW,ITMSW;
INTEGER FLAG,BREAK,I;
SAFE REAL ARRAY ITEMVAR XRA;
REAL ITEMVAR XR;
SET ITEMVAR XS;
ITEMVAR X,Y,Z; STRING STR,TOKEN,TRPSW;
SETBREAK(1,"≡⊗`, "&'12,'15,"ISN");
WHILE TRUE DO BEGIN "FLIT LOOP"
TYPE "COMMANDS: x,y,z x⊗y x⊗ANY x`y x`ANY GLOBAL DATUM NUMBER"&
↓&"*" EOM;
GLBSW←FALSE;
DTMSW←FALSE;
ITMSW←FALSE;
STR←INCHWL;
DO BEGIN "GET IT"
TOKEN←SCAN(STR,1,BREAK);
IF EQU(TOKEN,"DATUM")
THEN DTMSW←TRUE;
IF EQU(TOKEN,"NUMBER")
THEN ITMSW←TRUE;
IF EQU(TOKEN,"GLOBAL")
THEN GLBSW←TRUE;
END "GET IT" UNTIL ¬EQU(TOKEN,"DATUM") ∧ ¬EQU(TOKEN,"NUMBER")
∧ ¬EQU(TOKEN,"GLOBAL");
IF EQU(TOKEN,"Q")
THEN DONE;
IF ITMSW ∨ DTMSW
THEN DO BEGIN "CONVRT"
X←CVSI(TOKEN,FLAG);
IF FLAG ∨ TYPEIT(X)=0
THEN TYPE "NO ITEM - "&TOKEN EOM
ELSE IF ITMSW
THEN TYPE "PNAME:"&PRINTNAME(X)&TAB&"ITEM:"&CVOS(CVN(X)) EOM;
IF DTMSW
THEN CASE TYPEIT(X) OF
BEGIN "DATUMS"
[1] ⊂ "NONE" TYPE "*** NO TYPE ! ***" EOM; ⊃ "NONE";
[4] ⊂ "REAL"
XR←CVSI(TOKEN,FLAG);
TYPE "REAL ITEMVAR DATUM" EOM;
IF GLBSW
THEN TYPE "PNAME:"&PRINTNAME(XR)&CVG(GLB ∂(XR)) EOM
ELSE TYPE "PNAME:"&PRINTNAME(XR)&CVG(∂(XR)) EOM;
⊃ "REAL";
[6] ⊂ "SET"
XS←CVSI(TOKEN,FLAG);
TYPE "SET ITEMVAR DATUM" EOM;
IF GLBSW
THEN ∀ X|X ε $ ∂(XS) DO TYPE PRINTNAME(X)&" " EOS
ELSE ∀ X|X ε ∂(XS) DO TYPE PRINTNAME(X)&" " EOS;
TYPE "DONE" EOM;
⊃ "SET";
[17] ⊂ "REAL ARRAY"
XRA←CVSI(TOKEN,FLAG);
TYPE "REAL ARRAY ITEMVAR DATUM" EOM;
IF GLBSW
THEN FOR I←1 S1U 4 DO
TYPE CVG(GLB ∂(XRA)[I])&", " EOS
ELSE FOR I←1 S1U 7 DO
TYPE CVG(∂(XRA)[I])&", " EOS;
TYPE "DONE" EOM;
⊃ "REAL ARRAY"
END "DATUMS";
END "CONVRT" UNTIL STR=NULL;
X←CVSI(TOKEN,FLAG);
IF BREAK="⊗" ∨ BREAK="`"
THEN BEGIN "SET"
TRPSW←BREAK;
TOKEN←SCAN(STR,1,BREAK);
Y←CVSI(TOKEN,FLAG);
IF BREAK="≡"
THEN GO TRIPLE;
IF TRPSW="⊗"
THEN IF EQU(TOKEN,"ANY")
THEN IF GLBSW
THEN ∀ Z|GLB X⊗ANY≡Z DO TYPE PRINTNAME(Z)&" " EOS
ELSE ∀ Z|X⊗ANY≡Z DO TYPE PRINTNAME(Z)&" " EOS
ELSE IF GLBSW
THEN ∀ Z|GLOBAL X⊗Y≡Z DO TYPE PRINTNAME (Z)&" " EOS
ELSE ∀ Z|X⊗Y≡Z DO TYPE PRINTNAME (Z)&" " EOS
ELSE IF EQU(TOKEN,"ANY")
THEN IF GLBSW
THEN ∀ Z|GLB X⊗Z≡ANY DO TYPE PRINTNAME(Z)&" " EOS
ELSE ∀ Z|X⊗Z≡ANY DO TYPE PRINTNAME(Z)&" " EOS
ELSE IF GLBSW
THEN ∀ Z|GLOBAL X⊗Z≡ANY DO TYPE PRINTNAME(Z)&" " EOS
ELSE ∀ Z|X⊗Z≡Y DO TYPE PRINTNAME(Z)&" " EOS;
TYPE "THAT'S ALL OF 'EM." EOM;
END "SET"
ELSE BEGIN "TRIPLE"
TOKEN←SCAN(STR,1,BREAK);
Y←CVSI(TOKEN,FLAG);
TRIPLE: TOKEN←SCAN(STR,1,BREAK);
Z←CVSI(TOKEN,FLAG);
IF GLBSW
THEN IF GLOBAL X⊗Y≡Z
THEN TYPE "(GLOBAL) TRUE" EOM
ELSE TYPE "(GLOBAL) FALSE" EOM
ELSE IF X⊗Y≡Z
THEN TYPE "TRUE" EOM
ELSE TYPE "FALSE" EOM;
END "TRIPLE";
END "FLIT LOOP";
DPYBRK;
END "FLIT";
END "SEGDPY - SEGMENTER'S DISPLAY ROUTINES";